%AdaBoost算法综合十次SVM产生的模型
function accuracy=adaboost(predicted_label,testlabel)
n=45;%测试样本数
for i=1:n %初始化权值
    w(i)=1/n
end
for i=1:10 %10次提升
    ep(i)=weighted_error(predicted_label,testlabel,w,n,i);%计算第i个基分类器的加权误差
    if(ep(i)>0.5)
        for k=1:n %重新设置n个样本的权值
            w(k)=1/n;
        end
        ep(i)=weighted_error(predicted_label,testlabel,w,n,i);
    end
    a(i)=1/2*log((1-ep(i))/(ep(i)+eps));%第i个基分类器的重要性
    w_sum=0;
    for k=1:n %更新权值
        if predicted_label(k,i)==testlabel(k)
            w(k)=w(k)*exp(-a(i));
        else
            w(k)=w(k)*exp(a(i));
        end
        w_sum=w_sum+w(k);
    end
    for k=1:n %正规化权值
        w(k)=w(k)/(w_sum+eps);
    end
end

%综合模型预测的结果
total=n;%样本总数
error=0;%错误预测样本数
for i=1:n
    [im1,im2,im3]=ensemble(predicted_label,a,i)
    %综合模型预测值
    if im1>im2 && im1>im3
        em_predicted_label(i)=-1;
    elseif im2>im1 && im2>im3
        em_preddicted_label(i)=0;
    else
        em_predicted_label(i)=1;
    end      
end
em_predicted_label=em_predicted_label';
for i=1:n
   if em_predicted_label(i)~=testlabel(i)
       error=error+1;
   end
end
accuracy=(total-error)/total;